package com.project.controller;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.bean.LogBean;
import com.project.bean.UserBean;
import com.project.service.ILogService;
import com.project.service.IUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.List;

@RestController
@RequestMapping("user")
@Api(tags = "用户控制层")
public class UserController {
    @Autowired
    private IUserService userService;
    @Autowired
    private ILogService logService;

    @ApiOperation(value = "登录用户")
    @GetMapping("login")
    public UserBean login(String name, String pwd,HttpServletRequest request) {
        UserBean login = userService.login(name, pwd);
        System.out.println(login+"++++++++++++");
        if (login != null) {
            UserBean userBean = userService.findById(login.getId());
            request.getSession().setAttribute("loginUser", userBean);
            //登录成功后，添加日志
            LocalTime now = LocalTime.now();
            DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm");
            String format = now.format(dateTimeFormatter);

            String s = "用户:" + userBean.getName() + "在" + format + "登录此系统";
            logService.add(new LogBean(s));
            return userBean;
        } else {
            return null;
        }

    }

    /**
     * 分页动态查询用户信息
     *
     * @param pageNO   页码
     * @param userName 用户名
     * @return 分页对象
     */
    @ApiOperation(value = "分页动态查询用户信息")
    @GetMapping("cutByUser")
    public IPage<UserBean> cutByUser(Integer pageNO, String userName) {
        return userService.cutByUser(pageNO, userName);
    }

    /**
     * 添加用户
     * 添加用户， 同时添加该用户拥有的角色
     *
     * @param userName   用户名
     * @param realName   真实姓名
     * @param roleIdList 角色id集合
     */
    @ApiOperation(value = "添加用户")
    @PostMapping("addUser")
    public String addUser(String userName, String realName, List<Integer> roleIdList) {
        userService.addUser(userName, realName, roleIdList);
        return "ok";
    }

    /**
     * 删除用户
     * 删除用户，同时删除用户拥有的角色记录
     *
     * @param id 用户id
     */
    @ApiOperation(value = "删除用户")
    @DeleteMapping("delUser")
    public String delUser(Integer id) {
        userService.delUser(id);
        return "ok";
    }

    /**
     * 查看用户角色
     * 根据用户id，查询用户信息，并查询用户拥有角色集合
     *
     * @param userId 用户Id
     * @return 用户对象
     */
    @ApiOperation(value = "查看用户角色")
    @GetMapping("findById")
    public UserBean findById(Integer userId) {
        return userService.findById(userId);
    }

    /**
     * 修改用户角色
     *
     * @param userId     用户id
     * @param roleIdList 角色id集合
     */
    @ApiOperation(value = "修改用户角色")
    @PutMapping("update")
    public String update(Integer userId, List<Integer> roleIdList) {
        userService.update(userId, roleIdList);
        return "ok";
    }

    /**
     * 修改密码
     * 根据用户id修改密码
     *
     * @param userId 用户id
     * @param newPwd 新密码
     */
    @ApiOperation(value = "修改用户密码")
    @PutMapping("updatePwd")
    public String updatePwd(Integer userId, String newPwd) {
        userService.updatePwd(userId, newPwd);
        return "ok";
    }

    /**
     * 根据用户id查询用户及用户拥有的权限
     *
     * @param userId 用户id
     * @return 用户对象
     */
    @ApiOperation(value = "查询用户及用户拥有的权限")
    @GetMapping("findByPower")
    public UserBean findByPower(Integer userId) {
        return userService.findByPower(userId);
    }

}
